﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Collections;
using System.Transactions;

#region Testemunho
namespace Distrackting.DataLayer
{
    public partial class Testemunho
    {
        public void setTestemunho(Testemunho tes)
        {
            this.cod_testemunho = tes.cod_testemunho;
            this.cod_percurso = tes.cod_percurso;
            this.cod_utilizador = tes.cod_utilizador;
            this.data_realizado = tes.data_realizado;
            this.rating = tes.rating;
            this.texto = tes.texto;
        }
    }
}
#endregion

#region dataTestemunho
namespace Distrackting.DataLayer
{
    public class dataTestemunho
    {
        #region Methods
        public static void createTestemunho(Testemunho t)
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                dbData.Testemunhos.InsertOnSubmit(t);
                dbData.SubmitChanges();
            }
            catch (Exception e)
            {
                throw e;

            }
        }

        public static Testemunho getTestemunho(Guid cod_testemunho)
        {
            try
            {
                if (cod_testemunho == null)
                    return null;
                dbDataDataContext dbData = new dbDataDataContext();
                Testemunho tes = (from t in dbData.Testemunhos
                                  where t.cod_testemunho == cod_testemunho
                                  select t).FirstOrDefault();
                return tes;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Testemunho getTestemunho(Guid cod_utilizador, Guid cod_percurso)
        {
            try
            {
                if (cod_utilizador == null || cod_percurso == null)
                    return null;
                dbDataDataContext dbData = new dbDataDataContext();
                Testemunho tes = (from t in dbData.Testemunhos
                                  where (t.cod_utilizador == cod_utilizador) && (t.cod_percurso == cod_percurso)
                                  select t).FirstOrDefault();
                return tes;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Boolean changeTestemunho(Testemunho t)
        {
            try
            {
                if (t == null)
                    return false;
                else
                {
                    dbDataDataContext dbData = new dbDataDataContext();
                    Testemunho res = getTestemunho(t.cod_testemunho);
                    if (res == null) return false;
                    else
                    {
                        res.setTestemunho(t);
                        dbData.SubmitChanges();
                        return true;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IQueryable<Testemunho> getTestemunhos()
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                return dbData.Testemunhos;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static IQueryable<Testemunho> getTestemunhos(Expression<Func<Testemunho, bool>> whereClause)
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                return dbData.Testemunhos.Where(whereClause);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Boolean deleteTestemunho(Testemunho tes)
        {
            try
            {
                dbDataDataContext dbData = new dbDataDataContext();
                if (dbData.Testemunhos.Contains(tes))
                {
                    Testemunho res = (from t in dbData.Testemunhos
                                  where t.cod_testemunho == tes.cod_testemunho
                                  select t).FirstOrDefault();
                    if (res == null)
                        return false;
                    else
                    {
                        dbData.Testemunhos.DeleteOnSubmit(tes);
                        dbData.SubmitChanges();
                        return true;
                    }
                }
                else return false;
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static int contarTestemunhos()
        {
            dbDataDataContext dbData = new dbDataDataContext();
            try
            {
                return dbData.Testemunhos.Count();
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        #endregion
    }
}
#endregion